import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.stream.Collectors;

public class day_01_stream_4 {
    public static void main(String[] args) {
        // 终结方法

        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "龚汉强", "胡馨予", "王林林", "王欣");

        // count 统计
        System.out.println(list.stream().count());

        // toArray 收集流中的数据 并放到数组当中
        // 1.空参则返回object类型数组
        System.out.println(Arrays.toString(list.stream().toArray()));

        // 2.返回指定类型数组
        String[] arr = list.stream().toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];
            }
        });
        System.out.println(Arrays.toString(arr));
        // lambda 表达式
        System.out.println(Arrays.toString(list.stream().toArray(value -> new String[value])));

        // collect 收集流中的数据 放到集合中
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "龚汉强-男-21", "胡馨予-女-20", "王林林-男-21", "王欣-男-22");

        // 收集性别为男的 默认存入ArrayList集合
        System.out.println(list1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList()));

        // 存入Set集合 去重
        System.out.println(list1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet()));

        // 存入Map集合
        System.out.println(list1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))

                /*
                 * toMap 参数一：键的生成规则 参数二：值的生成规则
                 * 参数一： Function<String,String>泛型一表示流中的每一个数据的类型 泛型二表示Map集合中键的数据类型
                 * 参数二： Function<String,Integer>泛型一表示流中的每一个数据的类型 泛型二表示Map集合中值的数据类型
                 */

                .collect(Collectors.toMap(new Function<String, String>() {
                    @Override
                    public String apply(String s) {
                        return s.split("-")[0];
                    }
                }, new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.valueOf(s.split("-")[2]);
                    }
                })));

        System.out.println(list1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(s -> s.split("-")[0], s -> Integer.parseInt(s.split("-")[2]))));
    }
}
